package main

import (
	"fmt"
	"time"
)

// select 多路复用
// select可以同时监听一个或多个channel，直到其中一个channel ready

func test1(ch chan string) {
	time.Sleep(1 * time.Second)
	ch <- "test1"
}

func test2(ch chan string) {
	time.Sleep(2 * time.Second)
	ch <- "test2"
}

// func main() {
// 	// 2 个 channel
// 	output1 := make(chan string)
// 	output2 := make(chan string)
// 	// 跑 2 个协程写数据
// 	go test1(output1)
// 	go test1(output2)

// 	// 用 select 监控数据
// 	select {
// 	case s1 := <-output1:
// 		fmt.Println("s1=", s1)
// 	case s2 := <-output2:
// 		fmt.Println("s2=", s2)
// 	}
// }

func main() {
	// 2 个 channel
	output1 := make(chan string, 1)
	output2 := make(chan string, 1)
	// 跑 2 个协程写数据
	go func() {
		output2 <- "test2"
	}()

	go func() {
		output1 <- "test1"
	}()

	// 用 select 监控数据
	select {
	case s1 := <-output1:
		fmt.Println("s1=", s1)
	case s2 := <-output2:
		fmt.Println("s2=", s2)
	}
	fmt.Println("main 结束")
}
